﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SanFranciscoModel.Horarios;
using SanFranciscoModel.Docente;
using SanFranciscoModel.Materia;
using SanFranciscoModel.Dias;
using SanFranciscoModel.Intermedias;
using SanFranciscoModel.Curso;

namespace SanFrancisco
{
    public partial class SeleccionarDocentesParaCursoModificar : Form
    {
        List<HorarioDocente> _ListHorarioDocente = new List<HorarioDocente>();
        Curso _curso = new Curso();
        ModificarCurso _ModificaCurso = new ModificarCurso();


        public SeleccionarDocentesParaCursoModificar(List<HorarioDocente> hr, Curso cr, ModificarCurso mc)
        {
            _ListHorarioDocente = hr;
            _curso = cr;
            _ModificaCurso = mc;
            mc.Hide();
            InitializeComponent();
        }

        private void SeleccionarDocentesParaCurso_Load(object sender, EventArgs e)
        {
            CrearHorarios();
            CargarDocentesParaMaterias();
        }

        private void CargarDocentesParaMaterias()
        {
            DocenteManager DocenteManager = new DocenteManager();
            List<MateriaXDocente> ListMateriaXDocente = DocenteManager.getAllMateriaXDocente();

            if (cmb1.Visible == true)
            {
                cmb1.DisplayMember = "NombreyApellido";
                cmb1.ValueMember = "DNIDocente";
                cmb1.DataSource = DocenteManager.getDocentebyIdMateria(1);
            }

            if (cmb2.Visible == true)
            {
                cmb2.DisplayMember = "NombreyApellido";
                cmb2.ValueMember = "DNIDocente";
                cmb2.DataSource = DocenteManager.getDocentebyIdMateria(2);
            }

            if (cmb3.Visible == true)
            {
                cmb3.DisplayMember = "NombreyApellido";
                cmb3.ValueMember = "DNIDocente";
                cmb3.DataSource = DocenteManager.getDocentebyIdMateria(3);
            }

            if (cmb4.Visible == true)
            {
                cmb4.DisplayMember = "NombreyApellido";
                cmb4.ValueMember = "DNIDocente";
                cmb4.DataSource = DocenteManager.getDocentebyIdMateria(4);
            }

            if (cmb5.Visible == true)
            {
                cmb5.DisplayMember = "NombreyApellido";
                cmb5.ValueMember = "DNIDocente";
                cmb5.DataSource = DocenteManager.getDocentebyIdMateria(5);
            }

            if (cmb6.Visible == true)
            {
                cmb6.DisplayMember = "NombreyApellido";
                cmb6.ValueMember = "DNIDocente";
                cmb6.DataSource = DocenteManager.getDocentebyIdMateria(6);
            }

            if (cmb7.Visible == true)
            {
                cmb7.DisplayMember = "NombreyApellido";
                cmb7.ValueMember = "DNIDocente";
                cmb7.DataSource = DocenteManager.getDocentebyIdMateria(7);
            }

            if (cmb8.Visible == true)
            {
                cmb8.DisplayMember = "NombreyApellido";
                cmb8.ValueMember = "DNIDocente";
                cmb8.DataSource = DocenteManager.getDocentebyIdMateria(8);
            }

            if (cmb9.Visible == true)
            {
                cmb9.DisplayMember = "NombreyApellido";
                cmb9.ValueMember = "DNIDocente";
                cmb9.DataSource = DocenteManager.getDocentebyIdMateria(9);
            }

            if (cmb10.Visible == true)
            {
                cmb10.DisplayMember = "NombreyApellido";
                cmb10.ValueMember = "DNIDocente";
                cmb10.DataSource = DocenteManager.getDocentebyIdMateria(10);
            }

            //Selecciono las materias como tenian los combos
            MateriaManager MateriaManager = new SanFranciscoModel.Materia.MateriaManager();
            List<HorarioDocente> ListDocenteHorario = DocenteManager.GetDocenteHorarioByIdCurso(_curso.idCurso);

            foreach (HorarioDocente hd in ListDocenteHorario)
            {
                if (hd.IdMateria == 1)
                {
                    cmb1.Text = DocenteManager.getDocentebyDNI(hd.IdDocente).NombreyApellido;
                    cmb1.SelectedValue = DocenteManager.getDocentebyDNI(hd.IdDocente).DNIDocente;
                    cmb1.Enabled = true;
                }
                if (hd.IdMateria == 2)
                {
                    cmb2.Text = DocenteManager.getDocentebyDNI(hd.IdDocente).NombreyApellido;
                    cmb2.SelectedValue = DocenteManager.getDocentebyDNI(hd.IdDocente).DNIDocente;
                    cmb2.Enabled = true;
                }
                if (hd.IdMateria == 3)
                {
                    cmb3.Text = DocenteManager.getDocentebyDNI(hd.IdDocente).NombreyApellido;
                    cmb3.SelectedValue = DocenteManager.getDocentebyDNI(hd.IdDocente).DNIDocente;
                    cmb3.Enabled = true;
                }
                if (hd.IdMateria == 4)
                {
                    cmb4.Text = DocenteManager.getDocentebyDNI(hd.IdDocente).NombreyApellido;
                    cmb4.SelectedValue = DocenteManager.getDocentebyDNI(hd.IdDocente).DNIDocente;
                    cmb4.Enabled = true;
                }
                if (hd.IdMateria == 5)
                {
                    cmb5.Text = DocenteManager.getDocentebyDNI(hd.IdDocente).NombreyApellido;
                    cmb5.SelectedValue = DocenteManager.getDocentebyDNI(hd.IdDocente).DNIDocente;
                    cmb5.Enabled = true;
                }
                if (hd.IdMateria == 6)
                {
                    cmb6.Text = DocenteManager.getDocentebyDNI(hd.IdDocente).NombreyApellido;
                    cmb6.SelectedValue = DocenteManager.getDocentebyDNI(hd.IdDocente).DNIDocente;
                    cmb6.Enabled = true;
                }
                if (hd.IdMateria == 7)
                {
                    cmb7.Text = DocenteManager.getDocentebyDNI(hd.IdDocente).NombreyApellido;
                    cmb7.SelectedValue = DocenteManager.getDocentebyDNI(hd.IdDocente).DNIDocente;
                    cmb7.Enabled = true;
                }
                if (hd.IdMateria == 8)
                {
                    cmb8.Text = DocenteManager.getDocentebyDNI(hd.IdDocente).NombreyApellido;
                    cmb8.SelectedValue = DocenteManager.getDocentebyDNI(hd.IdDocente).DNIDocente;
                    cmb8.Enabled = true;
                }
                if (hd.IdMateria == 9)
                {
                    cmb9.Text = DocenteManager.getDocentebyDNI(hd.IdDocente).NombreyApellido;
                    cmb9.SelectedValue = DocenteManager.getDocentebyDNI(hd.IdDocente).DNIDocente;
                    cmb9.Enabled = true;
                }
                if (hd.IdMateria == 10)
                {
                    cmb10.Text = DocenteManager.getDocentebyDNI(hd.IdDocente).NombreyApellido;
                    cmb10.SelectedValue = DocenteManager.getDocentebyDNI(hd.IdDocente).DNIDocente;
                    cmb10.Enabled = true;
                }
            }
        }

        private void CrearHorarios()
        {
            MateriaManager MateriaManagar = new MateriaManager();
            List<Materia> ListMaterias = MateriaManagar.getMateriasAll();

            foreach (Materia h in ListMaterias)
            {
                if (h.idMateria == 1)
                    lbl1.Text = h.Materia1 + ": ";
                if (h.idMateria == 2)
                    lbl2.Text = h.Materia1 + ": ";
                if (h.idMateria == 3)
                    lbl3.Text = h.Materia1 + ": ";
                if (h.idMateria == 4)
                    lbl4.Text = h.Materia1 + ": ";
                if (h.idMateria == 5)
                    lbl5.Text = h.Materia1 + ": ";
                if (h.idMateria == 6)
                    lbl6.Text = h.Materia1 + ": ";
                if (h.idMateria == 7)
                    lbl7.Text = h.Materia1 + ": ";
                if (h.idMateria == 8)
                    lbl8.Text = h.Materia1 + ": ";
                if (h.idMateria == 9)
                    lbl9.Text = h.Materia1 + ": ";
                if (h.idMateria == 10)
                    lbl10.Text = h.Materia1 + ": ";
            }

            
            foreach (HorarioDocente hr in _ListHorarioDocente)
            {
                if (hr.IdMateria == 1)
                    lbl1.Text += ObtenerDiaPorId(hr.IdDia) + " " + ConvertirHora(ObtenerHoraPorId(hr.IdHora))+ " ";
                if (hr.IdMateria == 2)
                    lbl2.Text += ObtenerDiaPorId(hr.IdDia) + " " + ConvertirHora(ObtenerHoraPorId(hr.IdHora)) + " ";
                if (hr.IdMateria == 3)
                    lbl3.Text += ObtenerDiaPorId(hr.IdDia) + " " + ConvertirHora(ObtenerHoraPorId(hr.IdHora)) + " ";
                if (hr.IdMateria == 4)
                    lbl4.Text += ObtenerDiaPorId(hr.IdDia) + " " + ConvertirHora(ObtenerHoraPorId(hr.IdHora)) + " ";
                if (hr.IdMateria == 5)
                    lbl5.Text += ObtenerDiaPorId(hr.IdDia) + " " + ConvertirHora(ObtenerHoraPorId(hr.IdHora)) + " ";
                if (hr.IdMateria == 6)
                    lbl6.Text += ObtenerDiaPorId(hr.IdDia) + " " + ConvertirHora(ObtenerHoraPorId(hr.IdHora)) + " ";
                if (hr.IdMateria == 7)
                    lbl7.Text += ObtenerDiaPorId(hr.IdDia) + " " + ConvertirHora(ObtenerHoraPorId(hr.IdHora)) + " ";
                if (hr.IdMateria == 8)
                    lbl8.Text += ObtenerDiaPorId(hr.IdDia) + " " + ConvertirHora(ObtenerHoraPorId(hr.IdHora)) + " ";
                if (hr.IdMateria == 9)
                    lbl9.Text += ObtenerDiaPorId(hr.IdDia) + " " + ConvertirHora(ObtenerHoraPorId(hr.IdHora)) + " ";
                if (hr.IdMateria == 10)
                    lbl10.Text += ObtenerDiaPorId(hr.IdDia) + " " + ConvertirHora(ObtenerHoraPorId(hr.IdHora)) + " ";
            }

            //Veo las materias que quedaron de verdad

            foreach (Materia h in ListMaterias)
            {
                if (h.idMateria == 1)
                    if(lbl1.Text.Equals(h.Materia1 + ": "))
                    {
                        //si esta solo la materia vacia saco el label y el combo
                        lbl1.Visible=false;
                        cmb1.Visible=false;
                    }
                if (h.idMateria == 2)
                    if (lbl2.Text.Equals(h.Materia1 + ": "))
                    {
                        //si esta solo la materia vacia saco el label y el combo
                        lbl2.Visible = false;
                        cmb2.Visible = false;
                    }
                if (h.idMateria == 3)
                    if (lbl3.Text.Equals(h.Materia1 + ": "))
                    {
                        //si esta solo la materia vacia saco el label y el combo
                        lbl3.Visible = false;
                        cmb3.Visible = false;
                    }
                if (h.idMateria == 4)
                    if (lbl4.Text.Equals(h.Materia1 + ": "))
                    {
                        //si esta solo la materia vacia saco el label y el combo
                        lbl4.Visible = false;
                        cmb4.Visible = false;
                    }
                if (h.idMateria == 5)
                    if (lbl5.Text.Equals(h.Materia1 + ": "))
                    {
                        //si esta solo la materia vacia saco el label y el combo
                        lbl5.Visible = false;
                        cmb5.Visible = false;
                    }
                if (h.idMateria == 6)
                    if (lbl6.Text.Equals(h.Materia1 + ": "))
                    {
                        //si esta solo la materia vacia saco el label y el combo
                        lbl6.Visible = false;
                        cmb6.Visible = false;
                    }
                if (h.idMateria == 7)
                    if (lbl7.Text.Equals(h.Materia1 + ": "))
                    {
                        //si esta solo la materia vacia saco el label y el combo
                        lbl7.Visible = false;
                        cmb7.Visible = false;
                    }
                if (h.idMateria == 8)
                    if (lbl8.Text.Equals(h.Materia1 + ": "))
                    {
                        //si esta solo la materia vacia saco el label y el combo
                        lbl8.Visible = false;
                        cmb8.Visible = false;
                    }
                if (h.idMateria == 9)
                    if (lbl9.Text.Equals(h.Materia1 + ": "))
                    {
                        //si esta solo la materia vacia saco el label y el combo
                        lbl9.Visible = false;
                        cmb9.Visible = false;
                    }
                if (h.idMateria == 10)
                    if (lbl10.Text.Equals(h.Materia1 + ": "))
                    {
                        //si esta solo la materia vacia saco el label y el combo
                        lbl10.Visible = false;
                        cmb10.Visible = false;
                    }
                
            }
        }

        private string ObtenerHoraPorId(int idHora)
        {
            HorarioManager HorarioManager = new HorarioManager();
            List<Horario> ListHorario = HorarioManager.GetAllHorarios();
            string hora = string.Empty;

            foreach (Horario h in ListHorario)
            {
                if (h.IdHora == idHora)
                    hora = h.Inicio.ToString();
            }
            return hora;
        }

        private string ObtenerDiaPorId(int idDia)
        {
            DiasManager DiasManager = new DiasManager();
            List<Dia> ListDia = DiasManager.GetAllDias();
            string dia = string.Empty;

            foreach (Dia d in ListDia)
            {
                if (d.IdDia == idDia)
                    dia = d.Nombre;
            }
            return dia;
        }

        public string ConvertirHora(string h)
        {
            string hora = string.Empty;

            if (h.Count() == 3)
            {
                int flag = 0;
                hora += "0";
                foreach (char c in h)
                {
                    if (flag == 1)
                    {
                        hora += ":";
                    }
                    hora += c;
                    flag++;
                }
            }
            else
            {
                if (h.Count() == 4)
                {
                    int flag = 0;
                    foreach (char c in h)
                    {
                        if (flag == 2)
                        {
                            hora += ":";
                        }
                        hora += c;
                        flag++;
                    }
                }
            }
            return hora;
        }

        private void btnCrear_Click(object sender, EventArgs e)
        {
            bool flag = false;

            if (cmb1.Visible == true && cmb1.SelectedItem.ToString().Equals(""))
            {
                flag = true;
                MessageBox.Show("Falta seleccionar docente");
            }
            if (cmb2.Visible == true && cmb2.SelectedItem.ToString().Equals(""))
            {
                flag = true;
                MessageBox.Show("Falta seleccionar docente");
            }
            if (cmb3.Visible == true && cmb3.SelectedItem.ToString().Equals(""))
            {
                flag = true;
                MessageBox.Show("Falta seleccionar docente");
            }
            if (cmb4.Visible == true && cmb4.SelectedItem.ToString().Equals(""))
            {
                flag = true;
                MessageBox.Show("Falta seleccionar docente");
            }
            if (cmb5.Visible == true && cmb5.SelectedItem.ToString().Equals(""))
            {
                flag = true;
                MessageBox.Show("Falta seleccionar docente");
            }
            if (cmb6.Visible == true && cmb6.SelectedItem.ToString().Equals(""))
            {
                flag = true;
                MessageBox.Show("Falta seleccionar docente");
            }
            if (cmb7.Visible == true && cmb7.SelectedItem.ToString().Equals(""))
            {
                flag = true;
                MessageBox.Show("Falta seleccionar docente");
            }
            if (cmb8.Visible == true && cmb8.SelectedItem.ToString().Equals(""))
            {
                flag = true;
                MessageBox.Show("Falta seleccionar docente");
            }
            if (cmb9.Visible == true && cmb9.SelectedItem.ToString().Equals(""))
            {
                flag = true;
                MessageBox.Show("Falta seleccionar docente");
            }
            if (cmb10.Visible == true && cmb10.SelectedItem.ToString().Equals(""))
            {
                flag = true;
                MessageBox.Show("Falta seleccionar docente");
            }

            if (flag==false)
            {
                //Intento guardar en la tabla HorarioDocente si es que los docentes seleccionados tienen los horarios libres
                ComprobarHorariosDocentes();
            }

        }

        private void ComprobarHorariosDocentes()
        {
            List<HorarioDocente> ListHorarioDocenteTempotal = new List<HorarioDocente>();

            foreach (HorarioDocente hr in _ListHorarioDocente)
            {
                if (hr.IdMateria == 1)
                {
                    if (cmb1.Visible==true)
                    hr.IdDocente = (int)cmb1.SelectedValue;
                }
                if (hr.IdMateria == 2)
                {
                    if (cmb2.Visible == true)
                    hr.IdDocente = (int)cmb2.SelectedValue;
                }
                if (hr.IdMateria == 3)
                {
                    if (cmb3.Visible == true)
                    hr.IdDocente = (int)cmb3.SelectedValue;
                }
                if (hr.IdMateria == 4)
                {
                    if (cmb4.Visible == true)
                    hr.IdDocente = (int)cmb4.SelectedValue;
                }
                if (hr.IdMateria == 5)
                {
                    if (cmb5.Visible == true)
                    hr.IdDocente = (int)cmb5.SelectedValue;
                }
                if (hr.IdMateria == 6)
                {
                    if (cmb6.Visible == true)
                    hr.IdDocente = (int)cmb6.SelectedValue;
                }
                if (hr.IdMateria == 7)
                {
                    if (cmb7.Visible == true)
                    hr.IdDocente = (int)cmb7.SelectedValue;
                }
                if (hr.IdMateria == 8)
                {
                    if (cmb8.Visible == true)
                    hr.IdDocente = (int)cmb8.SelectedValue;
                }
                if (hr.IdMateria == 9)
                {
                    if (cmb9.Visible == true)
                    hr.IdDocente = (int)cmb9.SelectedValue;
                }
                if (hr.IdMateria == 10)
                {
                    if (cmb10.Visible == true)
                    hr.IdDocente = (int)cmb10.SelectedValue;
                }
            }

            //En _ListHorarioDocente tengo armado todo menos el idCurso. Hago un foreach de la lista y en el
            //caso que todos esten ok grabo y sino muestro un mensaje de que algo esta mal.


            bool flag = false;
            List<HorarioDocente> ListDocenteHorarioAnteriores = DocenteManager.GetDocenteHorarioByIdCurso(_curso.idCurso);
            foreach (HorarioDocente hr in _ListHorarioDocente)
            {
                String validacion = string.Empty;
                validacion = DocenteManager.ComprobarDisponibilidadDiayHoraDocenteModificar(hr, ListDocenteHorarioAnteriores, _curso.idCurso);

                if (!validacion.Equals(""))
                {
                    if (flag == false)
                    {
                        flag = true;
                        MessageBox.Show(validacion);
                    }
                }
            }

            if (flag == false)//Esto quiere decir que los horarios estan ok
            {
                GuardarYSalir();
            }
        }

        private void GuardarYSalir()
        {
            //CursoManager cm = new CursoManager();

            ////guardo el curso nuevo
            //_curso.Conducta = "0";
            //cm.guardarCurso(_curso);

            foreach (HorarioDocente hd in _ListHorarioDocente)
            {
                hd.IdCurso = _curso.idCurso;
            }

            //guardo los nuevos ingresos de horarioDocente
            DocenteManager dm = new DocenteManager();
            List<HorarioDocente> ListDocenteHorarioAnterior = DocenteManager.GetDocenteHorarioByIdCurso(_curso.idCurso);
            dm.updateHorariosDocente(_ListHorarioDocente, ListDocenteHorarioAnterior, _curso.idCurso);
            
            MessageBox.Show("Curso generado con Exito!");
            _ModificaCurso.Close();
            this.Close();
        }

        private void btnvolver_Click(object sender, EventArgs e)
        {
            _ModificaCurso.Show();
            this.Close();
        }
    }
}
